use log::LevelFilter; // 导入 LevelFilter

// 函数来设置日志记录
pub fn setup_logging() -> Result<(), fern::InitError> {
    // 为所有日志创建基础分发配置
    let base_config = fern::Dispatch::new()
        .format(|out, message, record| {
            // 定义日志格式
            out.finish(format_args!(
                "[{}][{}][{}] {}",
                chrono::Local::now().format("%Y-%m-%d %H:%M:%S"), // 本地时间戳
                record.level(),                                   // 日志级别
                record.target(),                                  // 日志来源模块
                message                                           // 日志消息
            ))
        })
        // 设置全局最低日志级别。例如，Info 级别意味着 Info, Warn, Error 都会被处理。
        // Debug 级别会处理 Debug, Info, Warn, Error。
        .level(LevelFilter::Info); // 全局级别设置为 Info

    // 配置控制台日志输出
    // 这个链条会接收所有通过了全局级别过滤的日志
    let console_log = fern::Dispatch::new()
        // 你可以为控制台单独设置格式或级别，如果需要的话
        // .level(LevelFilter::Debug) // 例如，控制台显示更详细的日志
        .chain(std::io::stdout()); // 输出到标准输出

    // 配置文件日志输出
    // 这个链条专门用于 Warn 和 Error 级别的日志
    let file_log = fern::Dispatch::new()
        .level(LevelFilter::Warn) // 此链条只处理 Warn 及更高级别的日志
        .chain(fern::log_file("./data/errors.log")?); // 输出到 app_errors.log 文件

    // 应用所有配置的链条
    base_config // 从基础配置开始
        .chain(console_log) // 添加控制台输出链
        .chain(file_log) // 添加文件输出链
        .apply()?; // 应用配置

    Ok(())
}
